package com.anfeng.cms.service.org;

import com.anfeng.cms.domain.org.AfDepartment;
import com.anfeng.cms.request.org.DepartDTO;
import com.baomidou.mybatisplus.service.IService;

import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author 吴朋
 * @since 2019-07-15
 */
public interface IAfDepartmentService extends IService<AfDepartment> {

    /**
     * 根据上级部门id 和 部门名称 增加 部门信息
     * @param parentId 上级部门id
     * @param deptName 新增部门名称
     * @return 部门id
     */
    String addDepartment(String parentId, String deptName);

    /**
     * 根据部门id 逻辑删除部门信息  如果是上级部门的话  下级部门也进行删除
     * @param deptId 部门id
     * @return 是否成功  1 成功  -1 失败
     */
    int deleteDepartment(String deptId);

    /**
     * 根据部门id 获取该部门的下属部门
     * @param deptId 部门id
     * @return 下属部门信息
     */
    List<AfDepartment> getSubDepartments(String deptId);

    /**
     * 根据id 获取 部门信息
     * @param deptId 部门id
     * @return 部门信息
     */
    AfDepartment getDepartmentInfo(String deptId);

    /**
     * 根据上级部门id 和 所查部门名称 查询部门信息
     * @param parentId 上级部门id
     * @param deptName 所查询部门名称
     * @return 部门信息
     */
    AfDepartment getDepartmentInfo(String parentId, String deptName);

    /**
     * 根据部门id 修改部门名称
     * @param deptId 部门id
     * @param department  部门信息
     * @return 是否成功 -1 失败  1 成功
     */
    int updateDepartmentInfo(String deptId, AfDepartment department);

    /**
     * 获取组织树结构
     * @return 组织结构
     */
    List<DepartDTO> getOrganizationTree();

    /**
     * 获取根部门组织 可能一个
     * @return 部门信息
     */
    List<AfDepartment> getRootDepartments();

    /**
     * 获取所有的最下级组织
     * @return 部门
     */
    List<AfDepartment> getAllSubDepartments();

    /**
     * 根据备注新增部门信息
     * @param remark 备注 （A/B/C）
     * @return 是否成功 -1 失败 1 成功
     */
    int addDepartmentByRemark(String remark);

    /**
     * 根据remark获取部门信息
     * @param remark 备注信息
     * @return 部门信息
     */
    AfDepartment getDepartmentByRemark(String remark);

    /**
     * 根据部门删除部门及子部门
     * @param deptId 部门id
     * @return 是否成功 -1 失败 1 成功
     */
    int deleteDepartmentAndSub(String deptId);
}
